/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.dp1.pucp.Ventas.Controlador;

import com.dp1.pucp.Modelo.Clases.Lineapedidoproducto;
import com.dp1.pucp.Modelo.Clases.Presentacion;
import com.dp1.pucp.Modelo.Clases.Tipoproducto;
import com.dp1.pucp.Util.Validaciones;
import com.dp1.pucp.Ventas.DAO.PedidoProdDAO;
import com.dp1.pucp.Ventas.VIsta.ProdxOrdenPedidoGUI;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

/**
 *
 * @author Lucia
 */
public class ProdxOrdenPedidoControlador {
    PedidoProdDAO dao;
    ProdxOrdenPedidoGUI prodOrdenPedidoGUI;
    private ArrayList<Lineapedidoproducto> listaPedidos = new ArrayList<>();
    
    PedidoProdControlador pedidoCont;
    
    PedidoProdPoliticaControlador pedidoCont2;
    
    
    ProdxOrdenPedidoControlador(PedidoProdDAO dao, ProdxOrdenPedidoGUI prodOrdenPedidoGUI, PedidoProdControlador pedidoProdControlador){
        this.dao = dao;
        this.prodOrdenPedidoGUI = prodOrdenPedidoGUI;
        this.pedidoCont = pedidoProdControlador;
        
        //}this.prodOrdenPedidoGUI.addBuscarProductoListener(new BuscarProductoListener());
        this.prodOrdenPedidoGUI.addAgregarProductoListener(new AgregarProductoListener());
        this.prodOrdenPedidoGUI.addLimpiarListener(new LimpiarListener());
        this.prodOrdenPedidoGUI.addGuardarProductosListener(new GuardarProductosListener());
        this.prodOrdenPedidoGUI.addCancelarListener(new CancelarListener());
        
        this.prodOrdenPedidoGUI.llenaComboProducto(dao.listarProductos());
        this.prodOrdenPedidoGUI.llenaComboPresentacion(dao.listarPresentaciones());
        
    }
    
    ProdxOrdenPedidoControlador(PedidoProdDAO dao, ProdxOrdenPedidoGUI prodOrdenPedidoGUI, PedidoProdPoliticaControlador pedidoProdControlador){
        this.dao = dao;
        this.prodOrdenPedidoGUI = prodOrdenPedidoGUI;
        this.pedidoCont2 = pedidoProdControlador;
        
        //}this.prodOrdenPedidoGUI.addBuscarProductoListener(new BuscarProductoListener());
        this.prodOrdenPedidoGUI.addAgregarProductoListener(new AgregarProductoListener());
        this.prodOrdenPedidoGUI.addLimpiarListener(new LimpiarListener());
        this.prodOrdenPedidoGUI.addGuardarProductosListener(new GuardarProductosListener());
        this.prodOrdenPedidoGUI.addCancelarListener(new CancelarListener());
        
        this.prodOrdenPedidoGUI.llenaComboProducto(dao.listarProductos());
        this.prodOrdenPedidoGUI.llenaComboPresentacion(dao.listarPresentaciones());
        
    }
    
    class BuscarProductoListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e){
            
        }
    }
     class AgregarProductoListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e){
            Lineapedidoproducto linea = new Lineapedidoproducto();
            
            Tipoproducto tipo = prodOrdenPedidoGUI.getTipoProducto();
            Presentacion presentacion = prodOrdenPedidoGUI.getPresentacion();
            //Verificar que no se ingrese el mismo producto otra vez
            for  (int i=0; i<listaPedidos.size(); i++){
                if (listaPedidos.get(i).getTipoproducto() == tipo)
                    if  (listaPedidos.get(i).getPresentacion() == presentacion){
                        Validaciones.mostrarMensajeErrorVal("El producto en esa presentación ya ha sido ingresado");
                        return;
                    }
                        
            }
            
            
            int cantidad = prodOrdenPedidoGUI.getCantidad();
            if (cantidad==0) 
            {
                Validaciones.mostrarMensajeErrorVal("Ingrese una cantidad."); return;
            }
            linea.setCantidad((float)cantidad);
            linea.setTipoproducto(prodOrdenPedidoGUI.getTipoProducto()); //requiere un tipoproducto
            linea.setPresentacion(prodOrdenPedidoGUI.getPresentacion());
            
            int cantidadPresentacion = prodOrdenPedidoGUI.getPresentacion().getCantidad();
            Float precio = dao.getPrecioProducto(prodOrdenPedidoGUI.getTipoProducto().getIdtipoproducto());
            
            Float precioUnitario = cantidadPresentacion*precio;
            //float precio = dao.obtenerPrecio(prodOrdenPedidoGUI.getTipoProducto());
            
            linea.setPUnitario(precioUnitario);
            float subtotal = cantidad*precioUnitario;
            linea.setSubtotal(subtotal);
            linea.setCantidadCubierta(0);
            
            listaPedidos.add(linea);
            prodOrdenPedidoGUI.listarPedidosGrilla(listaPedidos);
            
        }
    }
      class LimpiarListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e){
            prodOrdenPedidoGUI.limpiar();
             int tam = listaPedidos.size();
           for (int i=0; i<tam;i++){
                 
                listaPedidos.remove(0);
           }
            prodOrdenPedidoGUI.listarPedidosGrilla(listaPedidos);
        }
    }
      
       class GuardarProductosListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e){
            
            if (pedidoCont!=null){ // si es pedido de producto
                
                 for (int i=0; i< listaPedidos.size(); i++){
                    //ragrega a la tabla tblPedidos
                    pedidoCont.pedidos.add(listaPedidos.get(i));
                 }
                      pedidoCont.llamarListarPedidosGrilla();
                pedidoCont.calcularTotal();
                
            }else{ //  si es plan de produccion
                         
                for (int i=0; i< listaPedidos.size(); i++){
                    //agrega a la tabla tblPedidos
                    pedidoCont2.pedidos.add(listaPedidos.get(i));
                 }
                   pedidoCont2.llamarListarPedidosGrilla();
            }
            
      
            
           
            prodOrdenPedidoGUI.dispose();
        }
        
    } 
       class CancelarListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e){
            prodOrdenPedidoGUI.dispose();
         }
    } 
    
       
}
